An Input/Output (I/O) controller is a system that manages the detailed operations required to move data from a source location to a destination location at the request of a local or remote computing device. A local computing device can include, but is not limited to, an internal host processor that controls an I/O bus that is used by the I/O controller. A remote computing device can include, but is not limited to, an external host processor that has access to a local computing device and/or an I/O bus that is used by the I/O controller. A source location and a destination location of data being moved by the I/O controller can both exist on the same I/O bus or on at least two separate I/O busses, and can be any combination of computing entity including, but not limited to, a local or remote computing device and a local or remote data storage device.
One persistent problem with existing I/O controllers is that moving data to and from data storage devices by way of I/O busses is a relatively slow process compared to the processing speeds of even an average processor or Central Processing Unit (CPU) that eventually manipulates the data. For this reason, there is an ongoing need for faster and more efficient techniques of moving data between computing devices and/or data storage devices.
A preferred solution to optimizing the performance and efficiency of data processing engines generally and I/O controllers specifically, is the improved command interpreter system as disclosed in the document or documents cited in the above identified section titled "Related Applications." The improved command interpreter system is a hardware accelerated data processing engine, also known generally as a sequencer, that queues and executes low level commands that when chained together perform larger complete tasks such as the writing of data to a magnetic disk storage device. However, a data processing engine can only execute discrete commands quickly and efficiently if the commands and their accompanying data are readily available for executing and error recovery when necessary. For this reason, there exists a long felt need for a fast and efficient system for queuing commands in the context of an autonomous hardware accelerated data processing engine. A solution to this problem as disclosed in this document has heretofore not been known.